<?php
/**
 * Created by PhpStorm.
 * User: yuanji
 * Date: 2018/8/6
 * Time: 2:20
 */

namespace Lib;

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

class Mailer
{
    /**
     * 使用PHPMailer，立刻发送邮件
     * @param string $FromName  发件人昵称
     * @param string $From      设置发件人邮箱地址 同登录账号
     * @param string $Address     设置收件人邮箱地址
     * @param string $Subject           添加该邮件的主题
     * @param string $Body              添加邮件正文
     * @param string $Attachment        为该邮件添加附件
     * @return bool
     */
    public static function send($Address, $Subject, $Body, $FromName = '发件人昵称', $From = 'yuanji@yandui.com', $Attachment = NULL) {
        $mail = new PHPMailer(true);// 实例化PHPMailer核心类 Passing `true` enables exceptions
        try {
            $mail->SMTPDebug = 0;// 是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
            $mail->isSMTP();// 使用smtp鉴权方式发送邮件

            $mail->SMTPAuth = false;// smtp需要鉴权 这个必须是true
            //$mail->SMTPSecure = false;

            $mail->Host = '113.106.0.175';// 链接qq域名邮箱的服务器地址
            //$mail->SMTPSecure = 'ssl';// 设置使用ssl加密方式登录鉴权
            $mail->Port = 25;// 设置ssl连接smtp服务器的远程服务器端口号
            $mail->CharSet = 'UTF-8';// 设置发送的邮件的编码
            //$mail->FromName = $FromName;// 设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名
            $mail->FromName = $From;// 设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名
            $mail->From = $From;// 设置发件人邮箱地址 同登录账号
            //$mail->From = 'gaojinbo@yandui.com';// 设置发件人邮箱地址 同登录账号


            //$Username='415192821@qq.com';
            //$Username = 'mailedm1';
            //$Password='srrkmzefsowjcbef';
            //$Password = 'Qs3TuPOYKmat2l3';
            //$mail->Username = $Username;// smtp登录的账号 QQ邮箱即可
            //$mail->Password = $Password;// smtp登录的密码 使用生成的授权码



            $mail->isHTML(true);// 邮件正文是否为html编码 注意此处是一个方法
            $mail->addAddress($Address,'Joe Name');// 设置收件人邮箱地址

            $mail->Subject = $Subject;// 添加该邮件的主题
            $mail->Body = $Body;//'<h1>Hello World</h1>';// 添加邮件正文
            if (!empty($Attachment)){
                $mail->addAttachment($Attachment);// 为该邮件添加附件
            }
            $status = $mail->send();// 发送邮件 返回状态
            return $status;


            $mail->SMTPDebug = 1;// 是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
            $mail->isSMTP();// 使用smtp鉴权方式发送邮件
            $mail->SMTPAuth = true;// smtp需要鉴权 这个必须是true
            $mail->Host = 'smtp.qq.com';// 链接qq域名邮箱的服务器地址
            $mail->SMTPSecure = 'ssl';// 设置使用ssl加密方式登录鉴权
            $mail->Port = 465;// 设置ssl连接smtp服务器的远程服务器端口号
            $mail->CharSet = 'UTF-8';// 设置发送的邮件的编码
            $mail->FromName = $FromName;// 设置发件人昵称 显示在收件人邮件的发件人邮箱地址前的发件人姓名
            $mail->Username = $Username;// smtp登录的账号 QQ邮箱即可
            $mail->Password = $Password;// smtp登录的密码 使用生成的授权码
            $mail->From = $From;// 设置发件人邮箱地址 同登录账号
            $mail->isHTML(true);// 邮件正文是否为html编码 注意此处是一个方法
            $mail->addAddress($Address);// 设置收件人邮箱地址
            $mail->Subject = $Subject;// 添加该邮件的主题
            $mail->Body = $Body;//'<h1>Hello World</h1>';// 添加邮件正文
            if (!empty($Attachment)){
                $mail->addAttachment($Attachment);// 为该邮件添加附件
            }
            $status = $mail->send();// 发送邮件 返回状态
            return $status;



            //Server settings
            $mail->SMTPDebug = 2;                                 // Enable verbose debug output
            $mail->isSMTP();                                      // Set mailer to use SMTP
            $mail->Host = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
            $mail->SMTPAuth = true;                               // Enable SMTP authentication
            $mail->Username = 'user@example.com';                 // SMTP username
            $mail->Password = 'secret';                           // SMTP password
            $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
            $mail->Port = 587;                                    // TCP port to connect to

            //Recipients
            $mail->setFrom('from@example.com', 'Mailer');
            $mail->addAddress('joe@example.net', 'Joe User');     // Add a recipient
            $mail->addAddress('ellen@example.com');               // Name is optional
            $mail->addReplyTo('info@example.com', 'Information');
            $mail->addCC('cc@example.com');
            $mail->addBCC('bcc@example.com');

            //Attachments
            $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
            $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

            //Content
            $mail->isHTML(true);                                  // Set email format to HTML
            $mail->Subject = 'Here is the subject';
            $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
            $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

            $mail->send();
            echo 'Message has been sent';
        } catch (Exception $e) {
            //邮件发送异常处理 todo 做相关的统计处理。
            Logs::Error('Message could not be sent. Mailer Error: '.$mail->ErrorInfo);
            return false;
        }
    }
}